﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

using SIMA.Core.Data.Collection;
using System.Xml;
using SIMA.Core.Data.Access;
using SIMA.Entities;

namespace SIMA.Client.Auxiliars.MVVM
{
    public class ConsultarHistoricoMantenimientosMvvm:INotifyPropertyChanged,IDisposable
    {
        #region Consts

        private const string CADCONNECTION = "Data Source=.;Initial Catalog=SIMA;Integrated Security=True";

        #endregion

        #region Fields

        T_C_Equipo equipoActual;
        List<T_C_Equipo> equipos;
        List<T_C_Mantenimiento> mantenimientos;
        List<T_C_TipoMantenimiento> tipoMantenimientos;
        List<T_C_TipoMantenimientoPorEquipo> mantenimientosPorEquipo;
        SmartContainer<T_C_Equipo> equiposSmart;
        SmartContainer<T_C_Mantenimiento> mantenimientosSmart;
        SmartContainer<T_C_TipoMantenimiento> tipoMantenimientoSmart;
        SmartContainer<T_C_TipoMantenimientoPorEquipo> mantenimientoPorEquipoSmart;
        bool verTodos;
        private string xmlString;

        #endregion

        #region Properties

        public T_C_Equipo EquipoActual
        {
            get
            {
                return equipoActual;
            }
            set
            {
                equipoActual = value;
                this.OnPropertyChanged("EquipoActual");
                ReadXml();
            }
        }

        public List<T_C_Equipo> Equipos
        {
            get
            {
                return equipos;
            }
            set
            {
                equipos = value;
                this.OnPropertyChanged("Equipos");
            }
        }

        public bool VerTodos
        {
            get
            {
                return verTodos;
            }
            set
            {
                verTodos = value;
                this.OnPropertyChanged("VerTodos");
                if (value == true)
                {
                    EquipoActual = null;
                }
            }
        }

        public string XmlString 
        {
            get
            {
                return xmlString;
            }
            set
            {
                xmlString = value;
                this.OnPropertyChanged("XmlString");
            }
        }


        #endregion

        #region Public Methods

        public void ReadXml()
        {
           XmlString= GenerateXml().ToString();
        }

        #endregion

        #region Private Methods

        private XmlDocument GenerateXml()
        {
            XmlDocument xml = new XmlDocument();
            XmlDeclaration xmlDeclaration = xml.CreateXmlDeclaration("1.0", "utf-8", null);
            
            XmlElement rootNode = xml.CreateElement("data");

            xml.InsertBefore(xmlDeclaration, xml.DocumentElement);
            xml.AppendChild(rootNode);

            if (equipoActual != null)
            {
                foreach (T_C_Mantenimiento man in mantenimientos.Where(m=>m.Id_Equipo==equipoActual.Id_Equipo))
                {
                    XmlElement parentNode = xml.CreateElement("event");
                    parentNode.SetAttribute("start", man.FechaTrabajoInicio.ToShortDateString());
                    parentNode.SetAttribute("end", man.FechaTrabajoFin.ToShortDateString());
                    //parentNode.SetAttribute("title", equipos.Where(e => e.Id_Equipo == man.Id_Equipo).First().Nombre);
                    //XmlText details = xml.CreateTextNode();
                }
            }
            else
            {
                foreach (T_C_Mantenimiento man in mantenimientos)
                {
                    XmlElement parentNode = xml.CreateElement("event");
                    parentNode.SetAttribute("start", man.FechaTrabajoInicio.ToShortDateString());
                    parentNode.SetAttribute("end", man.FechaTrabajoFin.ToShortDateString());
                    //parentNode.SetAttribute("title", equipos.Where(e => e.Id_Equipo == man.Id_Equipo).First().Nombre);
                    //XmlText details = xml.CreateTextNode();
                }
            }
            
            return xml;
        }

        private void Init()
        {
            DataAccess.SetConnection(SIMA.Core.Enums.AccessType.FromString, CADCONNECTION);
            equiposSmart = new SmartContainer<T_C_Equipo>();
            mantenimientosSmart = new SmartContainer<T_C_Mantenimiento>();
            mantenimientoPorEquipoSmart = new SmartContainer<T_C_TipoMantenimientoPorEquipo>();
            tipoMantenimientoSmart = new SmartContainer<T_C_TipoMantenimiento>();            
        }

        #endregion

        #region Miembros de INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,new PropertyChangedEventArgs(property));
            }
        }

        #endregion

        #region Miembros de IDisposable

        public void Dispose()
        {
            GC.SuppressFinalize(this);
        }

        #endregion
    }
}
